package arithmetic.LeetCode;

import java.util.HashMap;
import java.util.Map;

import utils.ArrayUtil;

/**
 * 2352. 相等行列对
 * 给你一个下标从 0 开始、大小为 n x n 的整数矩阵 grid ，返回满足 Ri 行和 Cj 列相等的行列对 (Ri, Cj) 的数目。
 *
 * 如果行和列以相同的顺序包含相同的元素（即相等的数组），则认为二者是相等的。
 *
 * 示例 1：
 * 输入：grid = [[3,2,1],[1,7,6],[2,7,7]]
 * 输出：1
 * 解释：存在一对相等行列对：
 * - (第 2 行，第 1 列)：[2,7,7]
 *
 *  示例 2：
 * 输入：grid = [[3,1,2,2],[1,4,4,5],[2,4,2,2],[2,4,2,2]]
 * 输出：3
 * 解释：存在三对相等行列对：
 * - (第 0 行，第 0 列)：[3,1,2,2]
 * - (第 2 行, 第 2 列)：[2,4,2,2]
 * - (第 3 行, 第 2 列)：[2,4,2,2]
 *
 * https://leetcode.cn/problems/equal-row-and-column-pairs/
 *
 * @author jiangfeng on 2023/6/6
 */
public class EqualPairs {
    public static void main(String[] args) {
        //System.out.println(new Solution().equalPairs(ArrayUtil.toDArray("[[3,1,2,2],[1,4,4,5],[2,4,2,2],[2,4,2,2]]")));
        System.out.println(new Solution().equalPairs(ArrayUtil.toDArray("[[11,1],[1,11]]")));
    }
    static class Solution {
        public int equalPairs(int[][] grid) {
            Map<String,Integer> row = new HashMap();
            Map<String,Integer> column = new HashMap();
            for(int i=0;i<grid.length;i++){
                StringBuilder rowS = new StringBuilder();
                StringBuilder colS = new StringBuilder();
                for(int j = 0;j<grid.length;j++){
                    rowS.append(grid[i][j]).append(',');
                    colS.append(grid[j][i]).append(',');
                }
                String rowSt = rowS.toString();
                String colSt = colS.toString();
                row.put(rowSt,row.getOrDefault(rowSt,0)+1);
                column.put(colSt,column.getOrDefault(colSt,0)+1);
            }
            int res=0;
            for(String rowKey : row.keySet()){
                Integer colNum = column.get(rowKey);
                if(colNum!=null){
                    res+=colNum*row.get(rowKey);
                }
            }
            return res;
        }


    }
}
